Browse Source

Merge branch 'release/10.0' of https://code.fineres.com/scm/~qinghui.liu/design into release/10.0

feature/big-screen
Qinghui.Liu 4 years ago
parent
commit
7413a41304
  1. 37
      designer-base/src/main/java/com/fr/design/ExtraDesignClassManager.java
  2. 32
      designer-base/src/main/java/com/fr/design/data/DesignTableDataManager.java
  3. 14
      designer-base/src/main/java/com/fr/design/fun/ChartWidgetOptionProvider.java
  4. 9
      designer-base/src/main/java/com/fr/design/fun/FormAdaptiveConfigUIProcessor.java
  5. 29
      designer-base/src/main/java/com/fr/design/fun/impl/AbstractChartWidgetOptionProvider.java
  6. 7
      designer-base/src/main/java/com/fr/design/mainframe/JFormSliderPane.java
  7. BIN
      designer-base/src/main/resources/com/fr/design/images/m_insert/auto_chart.png
  8. 12
      designer-chart/src/main/java/com/fr/design/ChartTypeInterfaceManager.java
  9. 24
      designer-chart/src/main/java/com/fr/design/chart/AutoChartDialog.java
  10. 7
      designer-chart/src/main/java/com/fr/design/chart/ChartDialog.java
  11. 650
      designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/ChartTypePane.java
  12. 5
      designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/AbstractChartTypePane.java
  13. 3
      designer-chart/src/main/java/com/fr/van/chart/custom/VanChartCustomPlotPane.java
  14. 95
      designer-chart/src/main/java/com/fr/van/chart/designer/type/AbstractVanChartTypePane.java
  15. 1
      designer-chart/src/main/java/com/fr/van/chart/map/designer/type/VanChartMapPlotPane.java
  16. BIN
      designer-chart/src/main/resources/com/fr/design/images/us_emptydata.png
  17. BIN
      designer-chart/src/main/resources/com/fr/design/images/zh_emptydata.png
  18. 18
      designer-form/src/main/java/com/fr/design/designer/creator/XAutoChartCreator.java
  19. 7
      designer-form/src/main/java/com/fr/design/designer/creator/XCheckBoxGroup.java
  20. 3
      designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java
  21. 7
      designer-form/src/main/java/com/fr/design/designer/creator/XRadioGroup.java
  22. 32
      designer-form/src/main/java/com/fr/design/designer/properties/mobile/ButtonGroupPropertyUI.java
  23. 35
      designer-form/src/main/java/com/fr/design/mainframe/FormArea.java
  24. 16
      designer-form/src/main/java/com/fr/design/mainframe/FormParaWidgetPane.java
  25. 12
      designer-form/src/main/java/com/fr/design/mainframe/JForm.java
  26. 83
      designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/ButtonGroupDefinePane.java
  27. BIN
      designer-form/src/main/resources/com/fr/design/form/images/auto_chart_preview.png
  28. 3
      designer-realize/src/main/java/com/fr/design/actions/insert/cell/AutoChartCellAction.java
  29. 2
      designer-realize/src/main/java/com/fr/design/cell/editor/AutoChartCellEditor.java
  30. 7
      designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePane.java
  31. 7
      designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoLogAppender.java
  32. 12
      designer-realize/src/main/java/com/fr/design/mainframe/form/FormElementCaseDesigner.java
  33. 54
      designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java
  34. 3
      designer-realize/src/main/java/com/fr/design/widget/CellWidgetCardPane.java
  35. 3
      designer-realize/src/main/java/com/fr/quickeditor/CellQuickEditor.java
  36. 3
      designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java

37
designer-base/src/main/java/com/fr/design/ExtraDesignClassManager.java

@ -8,6 +8,7 @@ import com.fr.base.BaseUtils;
import com.fr.common.annotations.Open; import com.fr.common.annotations.Open;
import com.fr.design.data.datapane.TableDataNameObjectCreator; import com.fr.design.data.datapane.TableDataNameObjectCreator;
import com.fr.design.fun.CellWidgetOptionProvider; import com.fr.design.fun.CellWidgetOptionProvider;
import com.fr.design.fun.ChartWidgetOptionProvider;
import com.fr.design.fun.FormWidgetOptionProvider; import com.fr.design.fun.FormWidgetOptionProvider;
import com.fr.design.fun.MobileWidgetStyleProvider; import com.fr.design.fun.MobileWidgetStyleProvider;
import com.fr.design.fun.ParameterWidgetOptionProvider; import com.fr.design.fun.ParameterWidgetOptionProvider;
@ -193,6 +194,42 @@ public class ExtraDesignClassManager extends AbstractExtraClassManager implement
return result.toArray(new WidgetOption[result.size()]); return result.toArray(new WidgetOption[result.size()]);
} }
public Map<Class<? extends Widget>, Class<?>> getChartWidgetOptionsMap() {
Set<ChartWidgetOptionProvider> set = getArray(ChartWidgetOptionProvider.XML_TAG);
Map<Class<? extends Widget>, Class<?>> map = new HashMap<>();
for (ChartWidgetOptionProvider provider : set) {
map.put(provider.classForWidget(), provider.appearanceForWidget());
}
return map;
}
public WidgetOption[] getBeforeChartWidgetOptions() {
return getChartUnits(true);
}
public WidgetOption[] getAfterChartWidgetOptions() {
return getChartUnits(false);
}
private WidgetOption[] getChartUnits(boolean isBefore) {
Set<ChartWidgetOptionProvider> set = getArray(ChartWidgetOptionProvider.XML_TAG);
if (set.isEmpty()) {
return new WidgetOption[0];
}
Set<WidgetOption> result = new HashSet<>();
for (ChartWidgetOptionProvider provider : set) {
if (provider.isBefore() == isBefore) {
WidgetOption option = WidgetOptionFactory.createByWidgetClass(
provider.nameForWidget(),
BaseUtils.readIcon(provider.iconPathForWidget()),
provider.classForWidget()
);
result.add(option);
}
}
return result.toArray(new WidgetOption[result.size()]);
}
public WidgetOption[] getCellWidgetOptions() { public WidgetOption[] getCellWidgetOptions() {
Set<CellWidgetOptionProvider> set = getArray(CellWidgetOptionProvider.XML_TAG); Set<CellWidgetOptionProvider> set = getArray(CellWidgetOptionProvider.XML_TAG);

32
designer-base/src/main/java/com/fr/design/data/DesignTableDataManager.java

@ -22,7 +22,6 @@ import com.fr.design.data.tabledata.wrapper.TemplateTableDataWrapper;
import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.dialog.DialogActionAdapter;
import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.gui.iprogressbar.AutoProgressBar; import com.fr.design.gui.iprogressbar.AutoProgressBar;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.JTemplate;
import com.fr.design.parameter.ParameterInputPane; import com.fr.design.parameter.ParameterInputPane;
import com.fr.file.ProcedureConfig; import com.fr.file.ProcedureConfig;
@ -484,15 +483,9 @@ public abstract class DesignTableDataManager {
if (ArrayUtils.isEmpty(parameters)) { if (ArrayUtils.isEmpty(parameters)) {
parameters = tabledata.getParameters(Calculator.createCalculator()); parameters = tabledata.getParameters(Calculator.createCalculator());
} }
final Map<String, Object> parameterMap = new HashMap<>(); Map<String, Object> parameterMap = new HashMap<>();
if (needInputParams(isMustInputParameters, parameters)) { if (needInputParams(isMustInputParameters, parameters)) {
final ParameterInputPane pPane = new ParameterInputPane(parameters); showParaWindow(parameterMap, parameters);
pPane.showSmallWindow(new JFrame(), new DialogActionAdapter() {
@Override
public void doOk() {
parameterMap.putAll(pPane.update());
}
}).setVisible(true);
} else { } else {
for (ParameterProvider parameter : parameters) { for (ParameterProvider parameter : parameters) {
parameterMap.put(parameter.getName(), parameter.getValue()); parameterMap.put(parameter.getName(), parameter.getValue());
@ -583,15 +576,10 @@ public abstract class DesignTableDataManager {
return storeProcedure.creatLazyDataModel(); return storeProcedure.creatLazyDataModel();
} }
ParameterProvider[] inParameters = DataOperator.getInstance().getStoreProcedureParameters(storeProcedure); ParameterProvider[] inParameters = DataOperator.getInstance().getStoreProcedureParameters(storeProcedure);
final Map<String, Object> parameterMap = new HashMap<String, Object>(); Map<String, Object> parameterMap = new HashMap<>();
if (inParameters.length > 0 && !ComparatorUtils.equals(threadLocal.get(), NO_PARAMETER)) {// 检查Parameter. if (inParameters.length > 0 && !ComparatorUtils.equals(threadLocal.get(), NO_PARAMETER)) {// 检查Parameter.
final ParameterInputPane pPane = new ParameterInputPane(inParameters);
pPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { showParaWindow(parameterMap, inParameters);
@Override
public void doOk() {
parameterMap.putAll(pPane.update());
}
}).setVisible(true);
} }
storeProcedure.setFirstExpand(false); storeProcedure.setFirstExpand(false);
@ -601,6 +589,16 @@ public abstract class DesignTableDataManager {
return DataOperator.getInstance().previewProcedureDataModel(storeProcedure, parameterMap, 0); return DataOperator.getInstance().previewProcedureDataModel(storeProcedure, parameterMap, 0);
} }
private static void showParaWindow(final Map<String, Object> parameterMap, ParameterProvider[] inParameters) {
final ParameterInputPane pPane = new ParameterInputPane(inParameters);
pPane.showSmallWindow(new JFrame(), new DialogActionAdapter() {
@Override
public void doOk() {
parameterMap.putAll(pPane.update());
}
}).setVisible(true);
}
public static void setThreadLocal(String value) { public static void setThreadLocal(String value) {
threadLocal.set(value); threadLocal.set(value);
} }

14
designer-base/src/main/java/com/fr/design/fun/ChartWidgetOptionProvider.java

@ -0,0 +1,14 @@
package com.fr.design.fun;
/**
* @author Bjorn
* @version 10.0
* Created by Bjorn on 2020-06-12
*/
public interface ChartWidgetOptionProvider extends ParameterWidgetOptionProvider {
String XML_TAG = "ChartWidgetOptionProvider";
//在图表区域的开头还是结尾插入
boolean isBefore();
}

9
designer-base/src/main/java/com/fr/design/fun/FormAdaptiveConfigUIProcessor.java

@ -25,13 +25,10 @@ public interface FormAdaptiveConfigUIProcessor extends Immutable {
ShortCut getConfigShortCut(JTemplate jTemplate); ShortCut getConfigShortCut(JTemplate jTemplate);
/** /**
* 绘制自适应下报表块在表单界面中显示图片 * 是否开启表单滑块缩放功能
* @param size 绘制尺寸 * @return 是否开启表单滑块缩放
* @param elementCasePane 报表块内容对象
* @return 自适应下报表块在表单界面中显示的图片
*/ */
BufferedImage paintFormElementCaseImage(Dimension size, JComponent elementCasePane); boolean openFormSliderZoom();
/** /**
* 获取新自适应下字体显示的dpi * 获取新自适应下字体显示的dpi

29
designer-base/src/main/java/com/fr/design/fun/impl/AbstractChartWidgetOptionProvider.java

@ -0,0 +1,29 @@
package com.fr.design.fun.impl;
import com.fr.design.fun.ChartWidgetOptionProvider;
import com.fr.stable.fun.impl.AbstractProvider;
import com.fr.stable.fun.mark.API;
/**
* @author Bjorn
* @version 10.0
* Created by Bjorn on 2020-06-12
*/
@API(level = ChartWidgetOptionProvider.CURRENT_LEVEL)
public abstract class AbstractChartWidgetOptionProvider extends AbstractProvider implements ChartWidgetOptionProvider {
public int currentAPILevel() {
return CURRENT_LEVEL;
}
@Override
public String mark4Provider() {
return getClass().getName();
}
@Override
public boolean isBefore() {
return false;
}
}

7
designer-base/src/main/java/com/fr/design/mainframe/JFormSliderPane.java

@ -88,6 +88,8 @@ public class JFormSliderPane extends JPanel {
private UIRadioButton customButton; private UIRadioButton customButton;
//拖动条处理和button、直接输入不一样 //拖动条处理和button、直接输入不一样
private boolean isButtonOrIsTxt = true; private boolean isButtonOrIsTxt = true;
//是否选中指定的几个缩放等级,避免触发不必要的事件
private boolean selectSpecified = false;
private FormPopupPane dialog; private FormPopupPane dialog;
private int upButtonX; private int upButtonX;
private JPanel dialogContentPanel; private JPanel dialogContentPanel;
@ -288,6 +290,9 @@ public class JFormSliderPane extends JPanel {
refreshBottun(val); refreshBottun(val);
JFormattedTextField textField = ((JSpinner.NumberEditor) showValSpinner.getEditor()).getTextField(); JFormattedTextField textField = ((JSpinner.NumberEditor) showValSpinner.getEditor()).getTextField();
textField.setCaretPosition(showValSpinner.getValue().toString().length()); textField.setCaretPosition(showValSpinner.getValue().toString().length());
if (!selectSpecified) {
customButton.setSelected(true);
}
} }
}; };
@ -317,7 +322,9 @@ public class JFormSliderPane extends JPanel {
public void itemStateChanged(ItemEvent e) { public void itemStateChanged(ItemEvent e) {
JRadioButton temp = (JRadioButton) e.getSource(); JRadioButton temp = (JRadioButton) e.getSource();
if (temp.isSelected()) { if (temp.isSelected()) {
selectSpecified = true;
showValSpinner.setValue(Integer.valueOf(temp.getText().substring(0, temp.getText().indexOf("%")))); showValSpinner.setValue(Integer.valueOf(temp.getText().substring(0, temp.getText().indexOf("%"))));
selectSpecified = false;
} }
} }
}; };

BIN
designer-base/src/main/resources/com/fr/design/images/m_insert/auto_chart.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 B

After

Width:  |  Height:  |  Size: 423 B

12
designer-chart/src/main/java/com/fr/design/ChartTypeInterfaceManager.java

@ -104,6 +104,7 @@ import java.util.Iterator;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.awt.event.ActionListener;
import static com.fr.chart.charttypes.ChartTypeManager.DEFAULT_PRIORITY; import static com.fr.chart.charttypes.ChartTypeManager.DEFAULT_PRIORITY;
import static com.fr.chart.charttypes.ChartTypeManager.DEPRECATED_CHART_PRIORITY; import static com.fr.chart.charttypes.ChartTypeManager.DEPRECATED_CHART_PRIORITY;
@ -259,17 +260,21 @@ public class ChartTypeInterfaceManager implements ExtraChartDesignClassManagerPr
* *
* @param paneList pane容器 * @param paneList pane容器
*/ */
public void addPlotTypePaneList(List<FurtherBasicBeanPane<? extends ChartProvider>> paneList, Map<String, Map<String, FurtherBasicBeanPane<? extends ChartProvider>>> allChartTypePane) { public void addPlotTypePaneList(List<FurtherBasicBeanPane<? extends ChartProvider>> paneList,
Map<String, Map<String, FurtherBasicBeanPane<? extends ChartProvider>>> allChartTypePane,
ActionListener autoButtonListener) {
List<Integer> priorityList = getPriorityInOrder(); List<Integer> priorityList = getPriorityInOrder();
for (Integer aPriorityList : priorityList) { for (Integer aPriorityList : priorityList) {
String priority = String.valueOf(aPriorityList); String priority = String.valueOf(aPriorityList);
addPlotTypePaneList(priority, paneList, allChartTypePane); addPlotTypePaneList(priority, paneList, allChartTypePane, autoButtonListener);
} }
} }
public void addPlotTypePaneList(String priority, List<FurtherBasicBeanPane<? extends ChartProvider>> paneList, Map<String, Map<String, FurtherBasicBeanPane<? extends ChartProvider>>> allChartTypePane) { public void addPlotTypePaneList(String priority, List<FurtherBasicBeanPane<? extends ChartProvider>> paneList,
Map<String, Map<String, FurtherBasicBeanPane<? extends ChartProvider>>> allChartTypePane,
ActionListener autoButtonListener) {
if (chartTypeInterfaces != null && chartTypeInterfaces.containsKey(priority)) { if (chartTypeInterfaces != null && chartTypeInterfaces.containsKey(priority)) {
@ -286,6 +291,7 @@ public class ChartTypeInterfaceManager implements ExtraChartDesignClassManagerPr
continue; continue;
} }
pane.reLayout(plotID); pane.reLayout(plotID);
pane.registerButtonListener(autoButtonListener);
paneList.add(pane); paneList.add(pane);
if (allChartTypePane.get(priority) == null) { if (allChartTypePane.get(priority) == null) {

24
designer-chart/src/main/java/com/fr/design/chart/AutoChartDialog.java

@ -1,7 +1,11 @@
package com.fr.design.chart; package com.fr.design.chart;
import com.fr.base.chart.BaseChartCollection; import com.fr.base.chart.BaseChartCollection;
import com.fr.base.chart.chartdata.TopDefinitionProvider;
import com.fr.chart.chartattr.ChartCollection; import com.fr.chart.chartattr.ChartCollection;
import com.fr.chartx.TwoTuple;
import com.fr.design.i18n.Toolkit;
import com.fr.plugin.chart.vanchart.VanChart;
import java.awt.Component; import java.awt.Component;
import java.awt.Dialog; import java.awt.Dialog;
@ -46,10 +50,30 @@ public class AutoChartDialog extends ChartDialog {
}; };
} }
protected String getDialogTitle() {
return Toolkit.i18nText("Fine-Design_Chart_Auto_Recommended_Chart");
}
/** /**
* 更新新建的图表 ChartCollection * 更新新建的图表 ChartCollection
*/ */
public void populate(BaseChartCollection cc) { public void populate(BaseChartCollection cc) {
super.populate(cc); super.populate(cc);
ChartCollection chartCollection = (ChartCollection) getChartCollection();
VanChart vanChart = chartCollection.getSelectedChartProvider(VanChart.class);
if (vanChart == null) {
return;
}
TopDefinitionProvider filterDefinition = vanChart.getFilterDefinition();
if (filterDefinition == null) {
return;
}
TwoTuple<String, String[]> tableNameAndDataFields = filterDefinition.getTableNameAndDataFields();
if (tableNameAndDataFields == null) {
return;
}
String tableName = tableNameAndDataFields.getFirst();
String[] dataFields = tableNameAndDataFields.getSecond();
autoChartTypePane.populate(tableName, dataFields);
} }
} }

7
designer-chart/src/main/java/com/fr/design/chart/ChartDialog.java

@ -5,6 +5,7 @@ import com.fr.chart.chartattr.ChartCollection;
import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.BasicDialog;
import com.fr.design.gui.chart.MiddleChartDialog; import com.fr.design.gui.chart.MiddleChartDialog;
import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.i18n.Toolkit;
import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.third.joda.time.DateTime; import com.fr.third.joda.time.DateTime;
@ -46,7 +47,7 @@ public class ChartDialog extends MiddleChartDialog {
createTime = DateTime.now().toString("yyyy-MM-dd HH:mm:ss"); createTime = DateTime.now().toString("yyyy-MM-dd HH:mm:ss");
this.setModal(true); this.setModal(true);
this.setLayout(new BorderLayout()); this.setLayout(new BorderLayout());
setTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_M_Popup_Chart_Type")); setTitle(getDialogTitle());
this.applyClosingAction(); this.applyClosingAction();
this.applyEscapeAction(); this.applyEscapeAction();
@ -73,6 +74,10 @@ public class ChartDialog extends MiddleChartDialog {
GUICoreUtils.setWindowCenter(getOwner(), this); GUICoreUtils.setWindowCenter(getOwner(), this);
} }
protected String getDialogTitle() {
return Toolkit.i18nText("Fine-Design_Chart_M_Popup_Chart_Type");
}
protected Component initCenterPane() { protected Component initCenterPane() {
chartTypePane = new ChartTypePane(); chartTypePane = new ChartTypePane();
return chartTypePane; return chartTypePane;

650
designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/ChartTypePane.java

@ -9,9 +9,7 @@ import com.fr.design.dialog.BasicScrollPane;
import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.dialog.DialogActionAdapter;
import com.fr.design.gui.chart.MiddleChartDialog; import com.fr.design.gui.chart.MiddleChartDialog;
import com.fr.design.gui.frpane.UIComboBoxPane; import com.fr.design.gui.frpane.UIComboBoxPane;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.icombobox.UIComboBox; import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.chart.AbstractChartAttrPane; import com.fr.design.mainframe.chart.AbstractChartAttrPane;
import com.fr.design.mainframe.chart.ChartEditPane; import com.fr.design.mainframe.chart.ChartEditPane;
@ -39,364 +37,366 @@ import java.awt.event.ItemListener;
/** /**
* 图表 属性表, 类型选择 界面. * 图表 属性表, 类型选择 界面.
* @author kunsnat E-mail:kunsnat@gmail.com *
* @version 创建时间2012-12-26 上午10:56:51 * @author kunsnat E-mail:kunsnat@gmail.com
* @version 创建时间2012-12-26 上午10:56:51
*/ */
public class ChartTypePane extends AbstractChartAttrPane{ public class ChartTypePane extends AbstractChartAttrPane {
private ComboBoxPane chartTypeComBox; private ComboBoxPane chartTypeComBox;
private ChartTypeButtonPane buttonPane; private ChartTypeButtonPane buttonPane;
private ChartEditPane editPane; private ChartEditPane editPane;
private ChartCollection editingCollection; private ChartCollection editingCollection;
private UIButton autoButton; private ActionListener autoButtonListener;
@Override @Override
protected JPanel createContentPane() { protected JPanel createContentPane() {
JPanel content = new JPanel(new BorderLayout()); initButtonListener();
JPanel content = new JPanel(new BorderLayout());
buttonPane = new ChartTypeButtonPane(this);
content.add(buttonPane, BorderLayout.NORTH); buttonPane = new ChartTypeButtonPane(this);
content.add(buttonPane, BorderLayout.NORTH);
if (editingCollection != null) {
relayoutChartTypePane(editingCollection); if (editingCollection != null) {
}else { relayoutChartTypePane(editingCollection);
chartTypeComBox = new ComboBoxPane(); } else {
} chartTypeComBox = new ComboBoxPane();
}
BasicScrollPane scrollPane = new BasicScrollPane() {
@Override BasicScrollPane scrollPane = new BasicScrollPane() {
protected JPanel createContentPane() { @Override
return chartTypeComBox; protected JPanel createContentPane() {
} return chartTypeComBox;
}
@Override
protected void layoutContentPane() { @Override
protected void layoutContentPane() {
leftcontentPane = createContentPane();
this.add(leftcontentPane); leftcontentPane = createContentPane();
} this.add(leftcontentPane);
}
@Override
public void populateBean(Object ob) { @Override
} public void populateBean(Object ob) {
}
@Override
protected String title4PopupWindow() { @Override
return null; protected String title4PopupWindow() {
} return null;
}; }
content.add(scrollPane, BorderLayout.CENTER); };
content.add(scrollPane, BorderLayout.CENTER);
buttonPane.setEditingChartPane(chartTypeComBox);
buttonPane.setEditingChartPane(chartTypeComBox);
if(ChartTypeManager.AUTO_CHART) {
initAutoButton(); return content;
content.add(autoButton, BorderLayout.SOUTH); }
}
/**
return content; * 界面做为按钮时的图片位置. design_base
} */
public String getIconPath() {
/** return "com/fr/design/images/chart/ChartType.png";
* 界面做为按钮时的图片位置. design_base }
*/
public String getIconPath() { /**
return "com/fr/design/images/chart/ChartType.png"; * 界面标题
} *
/**
* 界面标题
* @return 界面标题 * @return 界面标题
*/ */
public String title4PopupWindow() { public String title4PopupWindow() {
return PaneTitleConstants.CHART_TYPE_TITLE; return PaneTitleConstants.CHART_TYPE_TITLE;
} }
private void initAutoButton(){ public void initButtonListener() {
//TODO @Bjorn 视觉样式优化 autoButtonListener = new ActionListener() {
autoButton = new UIButton(Toolkit.i18nText("Fine-Design_Chart_M_Popup_Auto_Chart_Type")); @Override
autoButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
@Override final MiddleChartDialog autoChartDialog = DesignModuleFactory.getAutoChartDialog(DesignerContext.getDesignerFrame());
public void actionPerformed(ActionEvent e) { autoChartDialog.populate(editingCollection);
final MiddleChartDialog autoChartDialog = DesignModuleFactory.getAutoChartDialog(DesignerContext.getDesignerFrame()); autoChartDialog.addDialogActionListener(new DialogActionAdapter() {
autoChartDialog.populate(editingCollection); @Override
autoChartDialog.addDialogActionListener(new DialogActionAdapter() { public void doOk() {
@Override populate(editingCollection);
public void doOk() { }
populate(editingCollection); });
} autoChartDialog.setVisible(true);
}); }
autoChartDialog.setVisible(true); };
} }
});
} class ComboBoxPane extends UIComboBoxPane<ChartProvider> {
private Map<String, Map<String, FurtherBasicBeanPane<? extends ChartProvider>>> allChartTypePane;
class ComboBoxPane extends UIComboBoxPane<ChartProvider> {
private Map<String, Map<String, FurtherBasicBeanPane<? extends ChartProvider>>> allChartTypePane; @Override
protected List<FurtherBasicBeanPane<? extends ChartProvider>> initPaneList() {
@Override List<FurtherBasicBeanPane<? extends ChartProvider>> paneList = new ArrayList<FurtherBasicBeanPane<? extends ChartProvider>>();
protected List<FurtherBasicBeanPane<? extends ChartProvider>> initPaneList() { allChartTypePane = new LinkedHashMap<String, Map<String, FurtherBasicBeanPane<? extends ChartProvider>>>();
List<FurtherBasicBeanPane<? extends ChartProvider>> paneList = new ArrayList<FurtherBasicBeanPane<? extends ChartProvider>>(); ChartTypeInterfaceManager.getInstance().addPlotTypePaneList(paneList, allChartTypePane, autoButtonListener);
allChartTypePane = new LinkedHashMap<String, Map<String, FurtherBasicBeanPane<? extends ChartProvider>>>(); return paneList;
ChartTypeInterfaceManager.getInstance().addPlotTypePaneList(paneList, allChartTypePane); }
return paneList;
} @Override
protected String title4PopupWindow() {
@Override return null;
protected String title4PopupWindow() { }
return null;
} /**
* 不同图表切换分同一个selected的不同图表切换和不同selected的不同图表切换
/** * 如果是切换图表的某个图表发生变化则collection的选择下标不会变
* 不同图表切换分同一个selected的不同图表切换和不同selected的不同图表切换 * 如果是切换图表的不同图表之间切换则collection的选择下标会改变
* 如果是切换图表的某个图表发生变化则collection的选择下标不会变 *
* 如果是切换图表的不同图表之间切换则collection的选择下标会改变 * @param chart
* @param chart */
*/ public void updateBean(ChartProvider chart) {
public void updateBean(ChartProvider chart) {
String lastPlotID = chart.getID();
String lastPlotID = chart.getID();
try {
try{ AbstractChartTypePane selectedPane = (AbstractChartTypePane) getSelectedPane();
AbstractChartTypePane selectedPane = (AbstractChartTypePane) getSelectedPane(); ChartProvider newDefaultChart = (ChartProvider) ChartTypeManager.getInstanceWithCheck().getCharts(selectedPane.getPlotID())[0].clone();
ChartProvider newDefaultChart =(ChartProvider) ChartTypeManager.getInstanceWithCheck().getCharts(selectedPane.getPlotID())[0].clone(); if (!ComparatorUtils.equals(chart.getClass(), newDefaultChart.getClass())) {
if (!ComparatorUtils.equals(chart.getClass(), newDefaultChart.getClass())) { //vanChart 和 chart 之间切换
//vanChart 和 chart 之间切换 //不同chart之间切换
//不同chart之间切换
editingCollection.removeNameObject(editingCollection.getSelectedIndex()); editingCollection.removeNameObject(editingCollection.getSelectedIndex());
editingCollection.addChart(newDefaultChart); editingCollection.addChart(newDefaultChart);
chart = newDefaultChart; chart = newDefaultChart;
} }
}catch (CloneNotSupportedException e){ } catch (CloneNotSupportedException e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e); FineLoggerFactory.getLogger().error(e.getMessage(), e);
} }
//这一步会替换plot //这一步会替换plot
((AbstractChartTypePane)getSelectedPane()).updateBean(chart); ((AbstractChartTypePane) getSelectedPane()).updateBean(chart);
String chartID = chart.getID(); String chartID = chart.getID();
//chartID改变的话图表类型就算改变了 //chartID改变的话图表类型就算改变了
if (StringUtils.isNotEmpty(chartID)) { if (StringUtils.isNotEmpty(chartID)) {
boolean isUseDefault = ChartTypeInterfaceManager.getInstance().isUseDefaultPane(chartID); boolean isUseDefault = ChartTypeInterfaceManager.getInstance().isUseDefaultPane(chartID);
if (editPane.isDefaultPane() != isUseDefault || (!isUseDefault && !ComparatorUtils.equals(lastPlotID, chartID))) { if (editPane.isDefaultPane() != isUseDefault || (!isUseDefault && !ComparatorUtils.equals(lastPlotID, chartID))) {
editPane.reLayout(chart); editPane.reLayout(chart);
} }
} }
} }
protected UIComboBox createComboBox() { protected UIComboBox createComboBox() {
return new FlexibleComboBox(); return new FlexibleComboBox();
} }
@Override @Override
protected void addItemChangeEvent() { protected void addItemChangeEvent() {
jcb.addItemListener(new ItemListener() { jcb.addItemListener(new ItemListener() {
@Override @Override
public void itemStateChanged(ItemEvent e) { public void itemStateChanged(ItemEvent e) {
FlexibleComboBox fcb = (FlexibleComboBox)jcb; FlexibleComboBox fcb = (FlexibleComboBox) jcb;
if (fcb.isReactor()){ if (fcb.isReactor()) {
return; return;
} }
comboBoxItemStateChanged(); comboBoxItemStateChanged();
CardLayout cl = (CardLayout)cardPane.getLayout(); CardLayout cl = (CardLayout) cardPane.getLayout();
cl.show(cardPane, cardNames[jcb.getSelectedIndex()]); cl.show(cardPane, cardNames[jcb.getSelectedIndex()]);
} }
}); });
} }
private void addAllCards() { private void addAllCards() {
Iterator<String> iterator = allChartTypePane.keySet().iterator(); Iterator<String> iterator = allChartTypePane.keySet().iterator();
while (iterator.hasNext()) { while (iterator.hasNext()) {
addOnePriorityCards(iterator.next(), false); addOnePriorityCards(iterator.next(), false);
} }
} }
private void addOnePriorityCards(String priority) { private void addOnePriorityCards(String priority) {
addOnePriorityCards(priority, true); addOnePriorityCards(priority, true);
} }
private void addOnePriorityCards(String priority, boolean ignore) { private void addOnePriorityCards(String priority, boolean ignore) {
Map<String, FurtherBasicBeanPane<? extends ChartProvider>> map = allChartTypePane.get(priority); Map<String, FurtherBasicBeanPane<? extends ChartProvider>> map = allChartTypePane.get(priority);
Iterator<Map.Entry<String, FurtherBasicBeanPane<? extends ChartProvider>>> iterator = map.entrySet().iterator(); Iterator<Map.Entry<String, FurtherBasicBeanPane<? extends ChartProvider>>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) { while (iterator.hasNext()) {
Map.Entry<String, FurtherBasicBeanPane<? extends ChartProvider>> entry = iterator.next(); Map.Entry<String, FurtherBasicBeanPane<? extends ChartProvider>> entry = iterator.next();
String plotID = entry.getKey(); String plotID = entry.getKey();
if (ignore || ChartTypeManager.enabledChart(plotID)) { if (ignore || ChartTypeManager.enabledChart(plotID)) {
cards.add(entry.getValue()); cards.add(entry.getValue());
} }
} }
} }
private void addOnePlotIDCards(String priority, String plotID) { private void addOnePlotIDCards(String priority, String plotID) {
cards.add(allChartTypePane.get(priority).get(plotID)); cards.add(allChartTypePane.get(priority).get(plotID));
} }
//因为饼图(新特性)把(新特性)去掉了,和老的饼图同名,下拉框选项和typePane不能一一对应了 //因为饼图(新特性)把(新特性)去掉了,和老的饼图同名,下拉框选项和typePane不能一一对应了
//处理办法:这边除了重构 下拉项选项和cardNames 还需要把cards重构下(不需要init pane,只需要我需要的拿出来就好了) //处理办法:这边除了重构 下拉项选项和cardNames 还需要把cards重构下(不需要init pane,只需要我需要的拿出来就好了)
private void relayout(ChartCollection collection){ private void relayout(ChartCollection collection) {
//重构需要重构下拉框选项和cardNames //重构需要重构下拉框选项和cardNames
ChartProvider chart = collection.getSelectedChartProvider(ChartProvider.class); ChartProvider chart = collection.getSelectedChartProvider(ChartProvider.class);
String chartID = chart.getID(); String chartID = chart.getID();
String priority = ChartTypeManager.getInstanceWithCheck().getPriority(chartID); String priority = ChartTypeManager.getInstanceWithCheck().getPriority(chartID);
boolean enabledChart = ChartTypeManager.enabledChart(chartID); boolean enabledChart = ChartTypeManager.enabledChart(chartID);
String item = ChartTypeInterfaceManager.getInstance().getName(chartID); String item = ChartTypeInterfaceManager.getInstance().getName(chartID);
//第一步就是重构cards //第一步就是重构cards
cards.clear(); cards.clear();
if (enabledChart) { if (enabledChart) {
if (collection.getChartCount() == 1) { if (collection.getChartCount() == 1) {
addAllCards(); addAllCards();
} else { } else {
addOnePriorityCards(priority); addOnePriorityCards(priority);
} }
} else { } else {
addOnePlotIDCards(priority, chartID); addOnePlotIDCards(priority, chartID);
} }
//下拉框重构开始。为了防止重构是触发update //下拉框重构开始。为了防止重构是触发update
((FlexibleComboBox)jcb).setItemEvenType(ItemEventType.REACTOR); ((FlexibleComboBox) jcb).setItemEvenType(ItemEventType.REACTOR);
//重构下拉框选项 //重构下拉框选项
cardNames = new String[cards.size()]; cardNames = new String[cards.size()];
cardPane.removeAll(); cardPane.removeAll();
jcb.removeAllItems(); jcb.removeAllItems();
for (int i = 0; i < this.cards.size(); i++) { for (int i = 0; i < this.cards.size(); i++) {
String name = this.cards.get(i).title4PopupWindow();// Name从各自的pane里面获取 String name = this.cards.get(i).title4PopupWindow();// Name从各自的pane里面获取
cardNames[i] = name; cardNames[i] = name;
cardPane.add(this.cards.get(i), cardNames[i]); cardPane.add(this.cards.get(i), cardNames[i]);
addComboBoxItem(cards, i); addComboBoxItem(cards, i);
} }
//重新选择选中的下拉项 //重新选择选中的下拉项
jcb.setSelectedItem(item); jcb.setSelectedItem(item);
jcb.setEnabled(enabledChart); jcb.setEnabled(enabledChart);
//下拉框重构结束 //下拉框重构结束
((FlexibleComboBox)jcb).setItemEvenType(ItemEventType.DEFAULT); ((FlexibleComboBox) jcb).setItemEvenType(ItemEventType.DEFAULT);
//重新选中 //重新选中
checkPlotPane(); checkPlotPane();
} }
private void checkPlotPane() { private void checkPlotPane() {
CardLayout cl = (CardLayout)cardPane.getLayout(); CardLayout cl = (CardLayout) cardPane.getLayout();
cl.show(cardPane, cardNames[jcb.getSelectedIndex()]); cl.show(cardPane, cardNames[jcb.getSelectedIndex()]);
} }
@Override @Override
public void populateBean(ChartProvider ob) { public void populateBean(ChartProvider ob) {
for (int i = 0; i < this.cards.size(); i++) { for (int i = 0; i < this.cards.size(); i++) {
FurtherBasicBeanPane pane = cards.get(i); FurtherBasicBeanPane pane = cards.get(i);
if (pane.accept(ob)) { if (pane.accept(ob)) {
pane.populateBean(ob); pane.populateBean(ob);
Object item = pane.title4PopupWindow(); Object item = pane.title4PopupWindow();
for (int j = 0; j < cardNames.length; j++) { for (int j = 0; j < cardNames.length; j++) {
if (ComparatorUtils.equals(item, cardNames[j])) { if (ComparatorUtils.equals(item, cardNames[j])) {
jcb.setSelectedIndex(j); jcb.setSelectedIndex(j);
} }
} }
return; return;
} }
} }
} }
@Override @Override
public ChartProvider updateBean() { public ChartProvider updateBean() {
return getSelectedPane().updateBean(); return getSelectedPane().updateBean();
} }
@Override @Override
public FurtherBasicBeanPane<? extends ChartProvider> getSelectedPane() { public FurtherBasicBeanPane<? extends ChartProvider> getSelectedPane() {
Object item = jcb.getSelectedItem(); Object item = jcb.getSelectedItem();
for (int i = 0; i < cards.size(); i++){ for (int i = 0; i < cards.size(); i++) {
if (ComparatorUtils.equals(item, cards.get(i).title4PopupWindow())){ if (ComparatorUtils.equals(item, cards.get(i).title4PopupWindow())) {
return cards.get(i); return cards.get(i);
} }
} }
return cards.get(0); return cards.get(0);
} }
} }
/** /**
* 面板重构 * 面板重构
* @param lastPlotID *
* @param collection * @param lastPlotID
*/ * @param collection
public void reLayoutEditPane(String lastPlotID, ChartCollection collection){ */
if (editPane == null) { public void reLayoutEditPane(String lastPlotID, ChartCollection collection) {
return; if (editPane == null) {
} return;
ChartProvider chart = collection.getSelectedChartProvider(ChartProvider.class); }
String plotID = chart.getID(); ChartProvider chart = collection.getSelectedChartProvider(ChartProvider.class);
boolean isUseDefault = ChartTypeInterfaceManager.getInstance().isUseDefaultPane(plotID); String plotID = chart.getID();
if (editPane.isDefaultPane() != isUseDefault || (!isUseDefault && !ComparatorUtils.equals(lastPlotID, plotID))) { boolean isUseDefault = ChartTypeInterfaceManager.getInstance().isUseDefaultPane(plotID);
editPane.reLayout(chart); if (editPane.isDefaultPane() != isUseDefault || (!isUseDefault && !ComparatorUtils.equals(lastPlotID, plotID))) {
} editPane.reLayout(chart);
} }
}
public void relayoutChartTypePane(ChartCollection collection){
chartTypeComBox.relayout(collection); public void relayoutChartTypePane(ChartCollection collection) {
} chartTypeComBox.relayout(collection);
}
/**
* 更新界面属性 用于展示 /**
*/ * 更新界面属性 用于展示
public void populate(ChartCollection collection) { */
editingCollection = collection; public void populate(ChartCollection collection) {
editingCollection = collection;
ChartProvider chart = collection.getSelectedChartProvider(ChartProvider.class);
this.remove(leftContentPane); ChartProvider chart = collection.getSelectedChartProvider(ChartProvider.class);
initContentPane(); this.remove(leftContentPane);
initContentPane();
buttonPane.populateBean(collection);
chartTypeComBox.populateBean(chart); buttonPane.populateBean(collection);
chartTypeComBox.populateBean(chart);
buttonPane.setVisible(ChartTypeInterfaceManager.getInstance().needChartChangePane(chart));
buttonPane.setVisible(ChartTypeInterfaceManager.getInstance().needChartChangePane(chart));
this.initAllListeners();
} this.initAllListeners();
}
/**
* 保存界面属性 /**
*/ * 保存界面属性
public void update(ChartCollection collection) { */
public void update(ChartCollection collection) {
editingCollection = collection; editingCollection = collection;
buttonPane.update(collection);// 内部操作时 已经做过处理. buttonPane.update(collection);// 内部操作时 已经做过处理.
ChartProvider chart = collection.getSelectedChartProvider(ChartProvider.class); ChartProvider chart = collection.getSelectedChartProvider(ChartProvider.class);
chartTypeComBox.updateBean(chart); chartTypeComBox.updateBean(chart);
} }
/** /**
* 所有图表的类型界面 * 所有图表的类型界面
*
* @return 类型界面 * @return 类型界面
*/ */
public FurtherBasicBeanPane[] getPaneList(){ public FurtherBasicBeanPane[] getPaneList() {
return chartTypeComBox.getCards().toArray(new FurtherBasicBeanPane[0]); return chartTypeComBox.getCards().toArray(new FurtherBasicBeanPane[0]);
} }
/** /**
* 当前选中的图表的index * 当前选中的图表的index
*
* @return 当前选中的图表的index * @return 当前选中的图表的index
*/ */
public int getSelectedIndex(){ public int getSelectedIndex() {
return chartTypeComBox.getSelectedIndex(); return chartTypeComBox.getSelectedIndex();
} }
/** /**
* 返回选中的图表的index * 返回选中的图表的index
*
* @return 选中的图标的序号 * @return 选中的图标的序号
*/ */
public int getSelectedChartIndex(){ public int getSelectedChartIndex() {
return chartTypeComBox.getSelectedIndex(); return chartTypeComBox.getSelectedIndex();
} }
/** /**
* 设置下编辑的面板 * 设置下编辑的面板
*
* @param currentEditPane 设置下编辑的面板 * @param currentEditPane 设置下编辑的面板
*/ */
public void registerChartEditPane(ChartEditPane currentEditPane) { public void registerChartEditPane(ChartEditPane currentEditPane) {

5
designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/type/AbstractChartTypePane.java

@ -22,6 +22,7 @@ import java.util.List;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Color; import java.awt.Color;
import java.awt.Component; import java.awt.Component;
import java.awt.event.ActionListener;
public abstract class AbstractChartTypePane<T extends ChartProvider> extends FurtherBasicBeanPane<T> { public abstract class AbstractChartTypePane<T extends ChartProvider> extends FurtherBasicBeanPane<T> {
@ -240,4 +241,8 @@ public abstract class AbstractChartTypePane<T extends ChartProvider> extends Fur
public ChartProvider getDefaultChart() { public ChartProvider getDefaultChart() {
return BarIndependentChart.barChartTypes[0]; return BarIndependentChart.barChartTypes[0];
} }
public void registerButtonListener(ActionListener autoButtonListener) {
}
} }

3
designer-chart/src/main/java/com/fr/van/chart/custom/VanChartCustomPlotPane.java

@ -61,7 +61,8 @@ public class VanChartCustomPlotPane extends AbstractVanChartTypePane {
return new Component[][]{ return new Component[][]{
new Component[]{typePane}, new Component[]{typePane},
new Component[]{stylePane}, new Component[]{stylePane},
new Component[]{contentPane} new Component[]{contentPane},
new Component[]{buttonPane},
}; };
} }

95
designer-chart/src/main/java/com/fr/van/chart/designer/type/AbstractVanChartTypePane.java

@ -1,5 +1,6 @@
package com.fr.van.chart.designer.type; package com.fr.van.chart.designer.type;
import com.fr.base.BaseUtils;
import com.fr.chart.base.AttrFillStyle; import com.fr.chart.base.AttrFillStyle;
import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Chart;
import com.fr.chart.chartattr.Legend; import com.fr.chart.chartattr.Legend;
@ -7,13 +8,16 @@ import com.fr.chart.chartattr.Plot;
import com.fr.chart.chartglyph.ConditionAttr; import com.fr.chart.chartglyph.ConditionAttr;
import com.fr.chart.chartglyph.ConditionCollection; import com.fr.chart.chartglyph.ConditionCollection;
import com.fr.chart.chartglyph.DataSheet; import com.fr.chart.chartglyph.DataSheet;
import com.fr.chart.charttypes.ChartTypeManager;
import com.fr.chartx.data.AbstractDataDefinition; import com.fr.chartx.data.AbstractDataDefinition;
import com.fr.chartx.data.ChartDataDefinitionProvider; import com.fr.chartx.data.ChartDataDefinitionProvider;
import com.fr.chartx.data.field.AbstractColumnFieldCollection; import com.fr.chartx.data.field.AbstractColumnFieldCollection;
import com.fr.chartx.data.field.diff.MultiCategoryColumnFieldCollection; import com.fr.chartx.data.field.diff.MultiCategoryColumnFieldCollection;
import com.fr.design.ChartTypeInterfaceManager; import com.fr.design.ChartTypeInterfaceManager;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.design.gui.ilable.MultilineLabel; import com.fr.design.gui.ilable.MultilineLabel;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane; import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane;
import com.fr.design.mainframe.chart.gui.type.ChartImagePane; import com.fr.design.mainframe.chart.gui.type.ChartImagePane;
import com.fr.design.mainframe.chart.info.ChartInfoCollector; import com.fr.design.mainframe.chart.info.ChartInfoCollector;
@ -25,21 +29,53 @@ import com.fr.plugin.chart.base.VanChartTools;
import com.fr.plugin.chart.base.VanChartZoom; import com.fr.plugin.chart.base.VanChartZoom;
import com.fr.plugin.chart.vanchart.VanChart; import com.fr.plugin.chart.vanchart.VanChart;
import javax.swing.BorderFactory;
import javax.swing.JPanel; import javax.swing.JPanel;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Color; import java.awt.Color;
import java.awt.Component; import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionListener;
public abstract class AbstractVanChartTypePane extends AbstractChartTypePane<Chart> { public abstract class AbstractVanChartTypePane extends AbstractChartTypePane<Chart> {
private static final long serialVersionUID = 7743244512351499265L; private static final long serialVersionUID = 7743244512351499265L;
private UICheckBox largeModelCheckBox; private UICheckBox largeModelCheckBox;
protected JPanel buttonPane;
protected UIButton autoButton;
private boolean samePlot; private boolean samePlot;
protected boolean isSamePlot() { protected boolean isSamePlot() {
return samePlot; return samePlot;
} }
public AbstractVanChartTypePane() {
buttonPane = new JPanel();
buttonPane.setLayout(new BorderLayout());
if (ChartTypeManager.AUTO_CHART) {
autoButton = new UIButton(Toolkit.i18nText("Fine-Design_Chart_Auto_Recommended_Chart"),
BaseUtils.readIcon("/com/fr/design/images/m_insert/auto_chart.png")) {
@Override
public Dimension getPreferredSize() {
return new Dimension((int) super.getPreferredSize().getWidth(), 25);
}
};
buttonPane.setBorder((BorderFactory.createEmptyBorder(5, 0, 0, 0)));
buttonPane.add(autoButton);
}
}
@Override
protected Component[][] getPaneComponents(JPanel typePane) {
return new Component[][]{
new Component[]{typePane},
new Component[]{buttonPane},
new Component[]{stylePane},
};
}
//新图表暂时还没有平面3d,渐变高光等布局。 //新图表暂时还没有平面3d,渐变高光等布局。
@Override @Override
protected String[] getTypeLayoutPath() { protected String[] getTypeLayoutPath() {
@ -66,7 +102,7 @@ public abstract class AbstractVanChartTypePane extends AbstractChartTypePane<Cha
return getPlotID(); return getPlotID();
} }
protected Component[][] getComponentsWithLargeData(JPanel typePane){ protected Component[][] getComponentsWithLargeData(JPanel typePane) {
largeModelCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Open_Large_Data_Model")); largeModelCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Open_Large_Data_Model"));
MultilineLabel prompt = new MultilineLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Large_Data_Model_Prompt")); MultilineLabel prompt = new MultilineLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Large_Data_Model_Prompt"));
prompt.setForeground(Color.red); prompt.setForeground(Color.red);
@ -84,7 +120,7 @@ public abstract class AbstractVanChartTypePane extends AbstractChartTypePane<Cha
* 更新界面内容 * 更新界面内容
*/ */
public void populateBean(Chart chart) { public void populateBean(Chart chart) {
for(ChartImagePane imagePane : typeDemo) { for (ChartImagePane imagePane : typeDemo) {
imagePane.isPressing = false; imagePane.isPressing = false;
} }
Plot plot = chart.getPlot(); Plot plot = chart.getPlot();
@ -100,13 +136,13 @@ public abstract class AbstractVanChartTypePane extends AbstractChartTypePane<Cha
VanChartPlot newPlot = getSelectedClonedPlot(); VanChartPlot newPlot = getSelectedClonedPlot();
checkTypeChange(oldPlot); checkTypeChange(oldPlot);
samePlot = accept(chart); samePlot = accept(chart);
if(typeChanged && samePlot){ if (typeChanged && samePlot) {
//同一中图表切换不同类型 //同一中图表切换不同类型
cloneOldPlot2New(oldPlot, newPlot); cloneOldPlot2New(oldPlot, newPlot);
chart.setPlot(newPlot); chart.setPlot(newPlot);
resetChartAttr4SamePlot(chart); resetChartAttr4SamePlot(chart);
ChartInfoCollector.getInstance().updateChartMiniType(chart); ChartInfoCollector.getInstance().updateChartMiniType(chart);
} else if(!samePlot){ } else if (!samePlot) {
//不同的图表类型切換 //不同的图表类型切換
resetChartAttr(chart, newPlot); resetChartAttr(chart, newPlot);
//切换图表时,数据配置不变,分类个数也不变 //切换图表时,数据配置不变,分类个数也不变
@ -114,55 +150,55 @@ public abstract class AbstractVanChartTypePane extends AbstractChartTypePane<Cha
//切换类型埋点 //切换类型埋点
ChartInfoCollector.getInstance().updateChartTypeTime(chart, oldPlot.getPlotID()); ChartInfoCollector.getInstance().updateChartTypeTime(chart, oldPlot.getPlotID());
} }
if(chart instanceof VanChart if (chart instanceof VanChart
&& !acceptDefinition(((VanChart) chart).getChartDataDefinition(), newPlot)) { && !acceptDefinition(((VanChart) chart).getChartDataDefinition(), newPlot)) {
((VanChart) chart).setChartDataDefinition(null); ((VanChart) chart).setChartDataDefinition(null);
} }
} }
protected boolean acceptDefinition(ChartDataDefinitionProvider definition, VanChartPlot vanChartPlot) { protected boolean acceptDefinition(ChartDataDefinitionProvider definition, VanChartPlot vanChartPlot) {
if(definition instanceof AbstractDataDefinition) { if (definition instanceof AbstractDataDefinition) {
AbstractColumnFieldCollection columnFieldCollection = ((AbstractDataDefinition) definition).getColumnFieldCollection(); AbstractColumnFieldCollection columnFieldCollection = ((AbstractDataDefinition) definition).getColumnFieldCollection();
return columnFieldCollection instanceof MultiCategoryColumnFieldCollection; return columnFieldCollection instanceof MultiCategoryColumnFieldCollection;
} }
return false; return false;
} }
protected void resetChartAttr4SamePlot(Chart chart){ protected void resetChartAttr4SamePlot(Chart chart) {
resetRefreshMoreLabelAttr((VanChart) chart); resetRefreshMoreLabelAttr((VanChart) chart);
} }
protected void resetChartAttr(Chart chart, Plot newPlot){ protected void resetChartAttr(Chart chart, Plot newPlot) {
chart.setPlot(newPlot); chart.setPlot(newPlot);
if(newPlot.isSupportZoomDirection() && !newPlot.isSupportZoomCategoryAxis()){ if (newPlot.isSupportZoomDirection() && !newPlot.isSupportZoomCategoryAxis()) {
//图表缩放新设计 恢复用注释。下面一行删除。 //图表缩放新设计 恢复用注释。下面一行删除。
((VanChart) chart).setVanChartZoom(new VanChartZoom()); ((VanChart) chart).setVanChartZoom(new VanChartZoom());
//图表缩放新设计 恢复用注释。下面一行取消注释。 //图表缩放新设计 恢复用注释。下面一行取消注释。
// ((VanChart) chart).setZoomAttribute(new ZoomAttribute()); // ((VanChart) chart).setZoomAttribute(new ZoomAttribute());
} }
//重置工具栏选项 //重置工具栏选项
((VanChart)chart).setVanChartTools(createVanChartTools()); ((VanChart) chart).setVanChartTools(createVanChartTools());
//重置标题选项 //重置标题选项
resetTitleAttr(chart); resetTitleAttr(chart);
//重置监控刷新选项 //重置监控刷新选项
resetRefreshMoreLabelAttr((VanChart)chart); resetRefreshMoreLabelAttr((VanChart) chart);
resetFilterDefinition(chart); resetFilterDefinition(chart);
} }
//默认有标题 //默认有标题
protected void resetTitleAttr(Chart chart){ protected void resetTitleAttr(Chart chart) {
VanChartPlot vanChartPlot = (VanChartPlot) chart.getPlot(); VanChartPlot vanChartPlot = (VanChartPlot) chart.getPlot();
chart.setTitle(vanChartPlot.getDefaultTitle()); chart.setTitle(vanChartPlot.getDefaultTitle());
} }
//重置数据配置 //重置数据配置
protected void resetFilterDefinition(Chart chart){ protected void resetFilterDefinition(Chart chart) {
} }
//重置监控刷新面板 //重置监控刷新面板
protected void resetRefreshMoreLabelAttr(VanChart chart){ protected void resetRefreshMoreLabelAttr(VanChart chart) {
chart.setRefreshMoreLabel(chart.getDefaultAutoAttrtooltip(chart)); chart.setRefreshMoreLabel(chart.getDefaultAutoAttrtooltip(chart));
} }
@ -170,9 +206,9 @@ public abstract class AbstractVanChartTypePane extends AbstractChartTypePane<Cha
return new VanChartTools(); return new VanChartTools();
} }
protected void checkTypeChange(Plot oldPlot){ protected void checkTypeChange(Plot oldPlot) {
for(int i = 0; i < typeDemo.size(); i++){ for (int i = 0; i < typeDemo.size(); i++) {
if(typeDemo.get(i).isPressing && i != oldPlot.getDetailType()){ if (typeDemo.get(i).isPressing && i != oldPlot.getDetailType()) {
typeChanged = true; typeChanged = true;
break; break;
} }
@ -193,15 +229,15 @@ public abstract class AbstractVanChartTypePane extends AbstractChartTypePane<Cha
cloneHotHyperLink(oldPlot, newPlot); cloneHotHyperLink(oldPlot, newPlot);
if (oldPlot.getPlotFillStyle() != null) { if (oldPlot.getPlotFillStyle() != null) {
newPlot.setPlotFillStyle((AttrFillStyle)oldPlot.getPlotFillStyle().clone()); newPlot.setPlotFillStyle((AttrFillStyle) oldPlot.getPlotFillStyle().clone());
} }
newPlot.setPlotStyle(oldPlot.getPlotStyle()); newPlot.setPlotStyle(oldPlot.getPlotStyle());
if (oldPlot.getDataSheet() != null) { if (oldPlot.getDataSheet() != null) {
newPlot.setDataSheet((DataSheet)oldPlot.getDataSheet().clone()); newPlot.setDataSheet((DataSheet) oldPlot.getDataSheet().clone());
} }
if (oldPlot.getBackground() != null) { if (oldPlot.getBackground() != null) {
newPlot.setBackground((Background)oldPlot.getBackground().clone()); newPlot.setBackground((Background) oldPlot.getBackground().clone());
} }
if (oldPlot.getBorderColor() != null) { if (oldPlot.getBorderColor() != null) {
newPlot.setBorderColor(oldPlot.getBorderColor()); newPlot.setBorderColor(oldPlot.getBorderColor());
@ -211,20 +247,20 @@ public abstract class AbstractVanChartTypePane extends AbstractChartTypePane<Cha
newPlot.setAlpha(oldPlot.getAlpha()); newPlot.setAlpha(oldPlot.getAlpha());
newPlot.setShadow(oldPlot.isShadow()); newPlot.setShadow(oldPlot.isShadow());
((VanChartPlot)newPlot).setCategoryNum( ((VanChartPlot)oldPlot).getCategoryNum()); ((VanChartPlot) newPlot).setCategoryNum(((VanChartPlot) oldPlot).getCategoryNum());
} catch (CloneNotSupportedException e) { } catch (CloneNotSupportedException e) {
FineLoggerFactory.getLogger().error("Error in change plot"); FineLoggerFactory.getLogger().error("Error in change plot");
} }
} }
protected void cloneHotHyperLink(Plot oldPlot, Plot newPlot) throws CloneNotSupportedException{ protected void cloneHotHyperLink(Plot oldPlot, Plot newPlot) throws CloneNotSupportedException {
if (oldPlot.getHotHyperLink() != null) { if (oldPlot.getHotHyperLink() != null) {
newPlot.setHotHyperLink((NameJavaScriptGroup)oldPlot.getHotHyperLink().clone()); newPlot.setHotHyperLink((NameJavaScriptGroup) oldPlot.getHotHyperLink().clone());
} }
} }
protected void cloneOldDefaultAttrConditionCollection(Plot oldPlot, Plot newPlot) throws CloneNotSupportedException{ protected void cloneOldDefaultAttrConditionCollection(Plot oldPlot, Plot newPlot) throws CloneNotSupportedException {
if (oldPlot.getConditionCollection() != null) { if (oldPlot.getConditionCollection() != null) {
ConditionCollection newCondition = new ConditionCollection(); ConditionCollection newCondition = new ConditionCollection();
newCondition.setDefaultAttr((ConditionAttr) oldPlot.getConditionCollection().getDefaultAttr().clone()); newCondition.setDefaultAttr((ConditionAttr) oldPlot.getConditionCollection().getDefaultAttr().clone());
@ -232,9 +268,16 @@ public abstract class AbstractVanChartTypePane extends AbstractChartTypePane<Cha
} }
} }
protected void cloneOldConditionCollection(Plot oldPlot, Plot newPlot) throws CloneNotSupportedException{ protected void cloneOldConditionCollection(Plot oldPlot, Plot newPlot) throws CloneNotSupportedException {
if (oldPlot.getConditionCollection() != null) { if (oldPlot.getConditionCollection() != null) {
newPlot.setConditionCollection((ConditionCollection)oldPlot.getConditionCollection().clone()); newPlot.setConditionCollection((ConditionCollection) oldPlot.getConditionCollection().clone());
}
}
@Override
public void registerButtonListener(ActionListener autoButtonListener) {
if (autoButton != null) {
autoButton.addActionListener(autoButtonListener);
} }
} }
} }

1
designer-chart/src/main/java/com/fr/van/chart/map/designer/type/VanChartMapPlotPane.java

@ -42,6 +42,7 @@ public class VanChartMapPlotPane extends AbstractVanChartTypePane {
} }
return new Component[][]{ return new Component[][]{
new Component[]{typePane}, new Component[]{typePane},
new Component[]{buttonPane},
new Component[]{sourceChoosePane} new Component[]{sourceChoosePane}
}; };
} }

BIN
designer-chart/src/main/resources/com/fr/design/images/us_emptydata.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 21 KiB

BIN
designer-chart/src/main/resources/com/fr/design/images/zh_emptydata.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 25 KiB

18
designer-form/src/main/java/com/fr/design/designer/creator/XAutoChartCreator.java

@ -2,6 +2,7 @@ package com.fr.design.designer.creator;
import com.fr.base.GraphHelper; import com.fr.base.GraphHelper;
import com.fr.base.chart.BaseChartCollection; import com.fr.base.chart.BaseChartCollection;
import com.fr.common.annotations.Open;
import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.dialog.DialogActionAdapter;
import com.fr.design.gui.chart.MiddleChartComponent; import com.fr.design.gui.chart.MiddleChartComponent;
import com.fr.design.gui.chart.MiddleChartDialog; import com.fr.design.gui.chart.MiddleChartDialog;
@ -11,21 +12,23 @@ import com.fr.design.mainframe.EditingMouseListener;
import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormDesigner;
import com.fr.design.module.DesignModuleFactory; import com.fr.design.module.DesignModuleFactory;
import com.fr.form.ui.ChartAutoEditor; import com.fr.form.ui.ChartAutoEditor;
import com.fr.general.IOUtils;
import com.fr.stable.Constants;
import com.fr.stable.bridge.StableFactory; import com.fr.stable.bridge.StableFactory;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.JPanel; import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Graphics; import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
/** /**
* @author Bjorn * @author Bjorn
* @version 10.0 * @version 10.0
* Created by Bjorn on 2020-05-26 * Created by Bjorn on 2020-05-26
*/ */
@Open
public class XAutoChartCreator extends XChartEditor { public class XAutoChartCreator extends XChartEditor {
private MiddleChartDialog autoChartDialog; private MiddleChartDialog autoChartDialog;
@ -76,6 +79,7 @@ public class XAutoChartCreator extends XChartEditor {
initChart(autoChartDialog.getChartCollection()); initChart(autoChartDialog.getChartCollection());
formDesigner.fireTargetModified(); formDesigner.fireTargetModified();
} }
@Override @Override
public void doCancel() { public void doCancel() {
editingMouseListener.stopEditing(); editingMouseListener.stopEditing();
@ -99,9 +103,13 @@ public class XAutoChartCreator extends XChartEditor {
public void paint(Graphics g) { public void paint(Graphics g) {
//TODO @Bjorn 视觉样式优化 BufferedImage bufferedImage = IOUtils.readImage("com/fr/design/form/images/auto_chart_preview.png");
g.setColor(Color.RED); GraphHelper.paintImage(
GraphHelper.fill(g, new Rectangle(0, 0, getWidth(), getHeight())); g, this.getWidth(), this.getHeight(), bufferedImage,
Constants.IMAGE_ADJUST,
0,
0, -1, -1
);
super.paint(g); super.paint(g);
} }

7
designer-form/src/main/java/com/fr/design/designer/creator/XCheckBoxGroup.java

@ -3,7 +3,9 @@
*/ */
package com.fr.design.designer.creator; package com.fr.design.designer.creator;
import com.fr.design.designer.properties.mobile.ButtonGroupPropertyUI;
import com.fr.design.form.util.XCreatorConstants; import com.fr.design.form.util.XCreatorConstants;
import com.fr.design.fun.WidgetPropertyUIProvider;
import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.widget.editors.DictionaryEditor; import com.fr.design.mainframe.widget.editors.DictionaryEditor;
@ -87,4 +89,9 @@ public class XCheckBoxGroup extends XFieldEditor {
protected String getIconName() { protected String getIconName() {
return "checkbox_group_16.png"; return "checkbox_group_16.png";
} }
@Override
public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() {
return new WidgetPropertyUIProvider[] {new ButtonGroupPropertyUI(this)};
}
} }

3
designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java

@ -19,7 +19,6 @@ import com.fr.form.parameter.FormSubmitButton;
import com.fr.form.ui.Button; import com.fr.form.ui.Button;
import com.fr.form.ui.CardAddButton; import com.fr.form.ui.CardAddButton;
import com.fr.form.ui.CardSwitchButton; import com.fr.form.ui.CardSwitchButton;
import com.fr.form.ui.ChartAutoEditor;
import com.fr.form.ui.CheckBox; import com.fr.form.ui.CheckBox;
import com.fr.form.ui.CheckBoxGroup; import com.fr.form.ui.CheckBoxGroup;
import com.fr.form.ui.ComboBox; import com.fr.form.ui.ComboBox;
@ -170,12 +169,12 @@ public class XCreatorUtils {
extraObjectMap.clear(); extraObjectMap.clear();
extraObjectMap.putAll(ExtraDesignClassManager.getInstance().getParameterWidgetOptionsMap()); extraObjectMap.putAll(ExtraDesignClassManager.getInstance().getParameterWidgetOptionsMap());
extraObjectMap.putAll(ExtraDesignClassManager.getInstance().getFormWidgetOptionsMap()); extraObjectMap.putAll(ExtraDesignClassManager.getInstance().getFormWidgetOptionsMap());
extraObjectMap.putAll(ExtraDesignClassManager.getInstance().getChartWidgetOptionsMap());
} }
private static void putExtraEditor() { private static void putExtraEditor() {
if (DesignModuleFactory.getChartEditorClass() != null) { if (DesignModuleFactory.getChartEditorClass() != null) {
objectMap.put(DesignModuleFactory.getChartEditorClass(), XChartEditor.class); objectMap.put(DesignModuleFactory.getChartEditorClass(), XChartEditor.class);
objectMap.put(ChartAutoEditor.class, XAutoChartCreator.class);
} }
} }

7
designer-form/src/main/java/com/fr/design/designer/creator/XRadioGroup.java

@ -12,6 +12,8 @@ import javax.swing.ButtonGroup;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.JRadioButton; import javax.swing.JRadioButton;
import com.fr.design.designer.properties.mobile.ButtonGroupPropertyUI;
import com.fr.design.fun.WidgetPropertyUIProvider;
import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.widget.editors.DictionaryEditor; import com.fr.design.mainframe.widget.editors.DictionaryEditor;
import com.fr.design.mainframe.widget.editors.InChangeBooleanEditor; import com.fr.design.mainframe.widget.editors.InChangeBooleanEditor;
@ -83,4 +85,9 @@ public class XRadioGroup extends XFieldEditor {
protected String getIconName() { protected String getIconName() {
return "button_group_16.png"; return "button_group_16.png";
} }
@Override
public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() {
return new WidgetPropertyUIProvider[] {new ButtonGroupPropertyUI(this)};
}
} }

32
designer-form/src/main/java/com/fr/design/designer/properties/mobile/ButtonGroupPropertyUI.java

@ -0,0 +1,32 @@
package com.fr.design.designer.properties.mobile;
import com.fr.design.designer.creator.XCreator;
import com.fr.design.designer.creator.XFieldEditor;
import com.fr.design.dialog.BasicPane;
import com.fr.design.fun.impl.AbstractWidgetPropertyUIProvider;
import com.fr.design.gui.itable.AbstractPropertyTable;
import com.fr.design.widget.ui.designer.mobile.ButtonGroupDefinePane;
public class ButtonGroupPropertyUI extends AbstractWidgetPropertyUIProvider {
private XCreator xCreator;
public ButtonGroupPropertyUI(XFieldEditor xButtonGroupEditor) {
this.xCreator = xButtonGroupEditor;
}
@Override
public AbstractPropertyTable createWidgetAttrTable() {
return null;
}
@Override
public BasicPane createWidgetAttrPane() {
return new ButtonGroupDefinePane(xCreator);
}
@Override
public String tableTitle() {
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Mobile_Attr");
}
}

35
designer-form/src/main/java/com/fr/design/mainframe/FormArea.java

@ -2,12 +2,14 @@ package com.fr.design.mainframe;
import com.fr.base.ScreenResolution; import com.fr.base.ScreenResolution;
import com.fr.common.inputevent.InputEventBaseOnOS; import com.fr.common.inputevent.InputEventBaseOnOS;
import com.fr.design.ExtraDesignClassManager;
import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.beans.events.DesignerEvent;
import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XCreator;
import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.designer.creator.XLayoutContainer;
import com.fr.design.designer.creator.XWBorderLayout; import com.fr.design.designer.creator.XWBorderLayout;
import com.fr.design.designer.creator.XWFitLayout; import com.fr.design.designer.creator.XWFitLayout;
import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.file.HistoryTemplateListPane;
import com.fr.design.fun.FormAdaptiveConfigUIProcessor;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.ispinner.UIBasicSpinner; import com.fr.design.gui.ispinner.UIBasicSpinner;
import com.fr.design.gui.itextfield.UINumberField; import com.fr.design.gui.itextfield.UINumberField;
@ -49,7 +51,6 @@ import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener; import java.awt.event.MouseWheelListener;
public class FormArea extends JComponent implements ScrollRulerComponent { public class FormArea extends JComponent implements ScrollRulerComponent {
private static final double SLIDER_FLOAT = 400.0; private static final double SLIDER_FLOAT = 400.0;
private static final double SLIDER_MIN = 10.0; private static final double SLIDER_MIN = 10.0;
public static final double DEFAULT_SLIDER = 100.0; public static final double DEFAULT_SLIDER = 100.0;
@ -76,6 +77,7 @@ public class FormArea extends JComponent implements ScrollRulerComponent {
private int resolution = ScreenResolution.getScreenResolution(); private int resolution = ScreenResolution.getScreenResolution();
private double screenValue; private double screenValue;
public FormScrollBar getHorScrollBar() { public FormScrollBar getHorScrollBar() {
return horScrollBar; return horScrollBar;
} }
@ -113,6 +115,13 @@ public class FormArea extends JComponent implements ScrollRulerComponent {
this.designer.addMouseWheelListener(showValSpinnerMouseWheelListener); this.designer.addMouseWheelListener(showValSpinnerMouseWheelListener);
} }
private boolean openSliderZoom(){
FormAdaptiveConfigUIProcessor adaptiveConfigUI = ExtraDesignClassManager.getInstance().getSingle(FormAdaptiveConfigUIProcessor.MARK_STRING);
if (adaptiveConfigUI != null) {
return adaptiveConfigUI.openFormSliderZoom();
}
return false;
}
public void onMobileAttrModified() { public void onMobileAttrModified() {
FormMobileAttr formMobileAttr = designer.getTarget().getFormMobileAttr(); FormMobileAttr formMobileAttr = designer.getTarget().getFormMobileAttr();
if (formMobileAttr.isMobileOnly()) { if (formMobileAttr.isMobileOnly()) {
@ -142,7 +151,7 @@ public class FormArea extends JComponent implements ScrollRulerComponent {
double f = TableLayout.FILL; double f = TableLayout.FILL;
double p = TableLayout.PREFERRED; double p = TableLayout.PREFERRED;
double[] rowSize = {f}; double[] rowSize = {f};
double[] columnSize = {p, f, p, p, p, p, p, f, p}; double[] columnSize = {p, f, p, p, p, p, p, p};
UILabel tipsPane = new UILabel("form"); UILabel tipsPane = new UILabel("form");
tipsPane.setPreferredSize(new Dimension(200, 0)); tipsPane.setPreferredSize(new Dimension(200, 0));
widthPane = new UINumberField(); widthPane = new UINumberField();
@ -150,18 +159,24 @@ public class FormArea extends JComponent implements ScrollRulerComponent {
heightPane = new UINumberField(); heightPane = new UINumberField();
heightPane.setPreferredSize(new Dimension(60, 0)); heightPane.setPreferredSize(new Dimension(60, 0));
// slidePane = new UINumberSlidePane(SLIDER_MIN, SLIDER_FLOAT);
// slidePane.setPreferredSize(new Dimension(260,20));
slidePane = JFormSliderPane.getInstance(); slidePane = JFormSliderPane.getInstance();
slidePane.setPreferredSize(new Dimension(200, 20)); slidePane.setPreferredSize(new Dimension(375, 20));
JPanel resizePane = TableLayoutHelper.createCommonTableLayoutPane(new JComponent[][]{{ tipsPane, new UILabel(), widthPane, new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Indent_Pixel")), new UILabel("x"), heightPane, new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Indent_Pixel")), new UILabel(), slidePane }}, rowSize, columnSize, RESIZE_PANE_GAP); JPanel resizePane = TableLayoutHelper.createCommonTableLayoutPane(
new JComponent[][]{{tipsPane, new UILabel(), widthPane,
new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Indent_Pixel")),
new UILabel("x"), heightPane,
new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Indent_Pixel")),
slidePane}}, rowSize, columnSize, RESIZE_PANE_GAP);
this.add(FormRulerLayout.BOTTOM, resizePane); this.add(FormRulerLayout.BOTTOM, resizePane);
setWidgetsConfig(); setWidgetsConfig();
boolean needOpenSliderZoom = openSliderZoom();
// 先初始话滑块及对应事件,然后获取分辨率调整容器的显示大小 // 先初始话滑块及对应事件,然后获取分辨率调整容器的显示大小
slidePane.setEnabled(false); slidePane.setEnabled(needOpenSliderZoom);
slidePane.setVisible(false); slidePane.setVisible(needOpenSliderZoom);
// initTransparent(); if (needOpenSliderZoom) {
initTransparent();
}
initCalculateSize(); initCalculateSize();
} }

16
designer-form/src/main/java/com/fr/design/mainframe/FormParaWidgetPane.java

@ -34,6 +34,10 @@ import javax.swing.JComponent;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JSeparator; import javax.swing.JSeparator;
import javax.swing.SwingConstants; import javax.swing.SwingConstants;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Color; import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
@ -42,10 +46,6 @@ import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent; import java.awt.event.ComponentEvent;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
/** /**
* @author null * @author null
@ -318,11 +318,11 @@ public class FormParaWidgetPane extends JPanel {
@Override @Override
public void mouseClicked(MouseEvent e) { public void mouseClicked(MouseEvent e) {
initWidgetTypePopUp(); initWidgetTypePopUp();
if(jSeparatorChart != null) { if (jSeparatorChart != null) {
widgetTypePopupMenu.show(FormParaWidgetPane.this, widgetTypePopupMenu.show(FormParaWidgetPane.this,
(int) jSeparatorChart.getLocation().getX() + BORDER, (int) jSeparatorChart.getLocation().getX() + BORDER,
(int) jSeparatorChart.getLocation().getY()); (int) jSeparatorChart.getLocation().getY());
}else{ } else {
widgetTypePopupMenu.show(FormParaWidgetPane.this, widgetTypePopupMenu.show(FormParaWidgetPane.this,
(int) jSeparatorLayout.getLocation().getX() + BORDER, (int) jSeparatorLayout.getLocation().getX() + BORDER,
(int) jSeparatorLayout.getLocation().getY()); (int) jSeparatorLayout.getLocation().getY());
@ -440,7 +440,9 @@ public class FormParaWidgetPane extends JPanel {
private WidgetOption[] loadChartOptions() { private WidgetOption[] loadChartOptions() {
if (chartOptions == null) { if (chartOptions == null) {
chartOptions = DesignModuleFactory.getExtraWidgetOptions(); ExtraDesignClassManager instance = ExtraDesignClassManager.getInstance();
WidgetOption[] widgetOptions = ArrayUtils.addAll(instance.getBeforeChartWidgetOptions(), DesignModuleFactory.getExtraWidgetOptions());
chartOptions = ArrayUtils.addAll(widgetOptions, instance.getAfterChartWidgetOptions());
} }
return chartOptions; return chartOptions;
} }

12
designer-form/src/main/java/com/fr/design/mainframe/JForm.java

@ -154,6 +154,12 @@ public class JForm extends JTemplate<Form, FormUndoState> implements BaseJForm<F
return elementCaseDesign.getEditingElementCasePane(); return elementCaseDesign.getEditingElementCasePane();
} }
public FormECDesignerProvider getElementCaseDesign() {
return elementCaseDesign;
}
@Override @Override
public JComponent getCurrentReportComponentPane() { public JComponent getCurrentReportComponentPane() {
return null; return null;
@ -886,7 +892,7 @@ public class JForm extends JTemplate<Form, FormUndoState> implements BaseJForm<F
/** /**
* 格子编辑组件 * 格子编辑组件
*/ */
private FormECDesignerProvider initElementCaseDesign() { protected FormECDesignerProvider initElementCaseDesign() {
HashMap<String, Class> designerClass = new HashMap<String, Class>(); HashMap<String, Class> designerClass = new HashMap<String, Class>();
designerClass.put(Constants.ARG_0, FormElementCaseProvider.class); designerClass.put(Constants.ARG_0, FormElementCaseProvider.class);
@ -902,7 +908,7 @@ public class JForm extends JTemplate<Form, FormUndoState> implements BaseJForm<F
/** /**
* 整个报表块编辑区域 * 整个报表块编辑区域
*/ */
private FormECCompositeProvider initComposite() { protected FormECCompositeProvider initComposite() {
Object[] compositeArg = new Object[]{this, elementCaseDesign, formDesign.getElementCaseContainer()}; Object[] compositeArg = new Object[]{this, elementCaseDesign, formDesign.getElementCaseContainer()};
HashMap<String, Class> compoClass = new HashMap<String, Class>(); HashMap<String, Class> compoClass = new HashMap<String, Class>();
compoClass.put(Constants.ARG_0, BaseJForm.class); compoClass.put(Constants.ARG_0, BaseJForm.class);
@ -929,7 +935,7 @@ public class JForm extends JTemplate<Form, FormUndoState> implements BaseJForm<F
}); });
} }
private void saveImage() { protected void saveImage() {
//触发一次保存, 把缩略图保存起来 //触发一次保存, 把缩略图保存起来
JForm.this.fireTargetModified(); JForm.this.fireTargetModified();
//用formDesign的size是为了当报表块被拉伸时, 它对应的背景图片需要足够大才不会显示成空白 //用formDesign的size是为了当报表块被拉伸时, 它对应的背景图片需要足够大才不会显示成空白

83
designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/ButtonGroupDefinePane.java

@ -0,0 +1,83 @@
package com.fr.design.widget.ui.designer.mobile;
import com.fr.design.constants.LayoutConstants;
import com.fr.design.designer.creator.XCreator;
import com.fr.design.foldablepane.UIExpandablePane;
import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.ispinner.UISpinner;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.FormDesigner;
import com.fr.form.ui.ButtonGroup;
import javax.swing.*;
import java.awt.*;
public class ButtonGroupDefinePane extends MobileWidgetDefinePane {
private XCreator xCreator; // 当前选中控件的xCreator
private UISpinner maxShowRowsSpinner;
public ButtonGroupDefinePane(XCreator xCreator) {
this.xCreator = xCreator;
}
@Override
public void initPropertyGroups(Object source) {
this.setLayout(FRGUIPaneFactory.createBorderLayout());
UILabel maxShowRowsLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design-Mobile_Max_Show_Rows"), SwingConstants.LEFT);
this.maxShowRowsSpinner = new UISpinner(0, Integer.MAX_VALUE, 1, 5);
Component[][] components = new Component[][]{
new Component[] {maxShowRowsLabel, maxShowRowsSpinner}
};
double f = TableLayout.FILL;
double p = TableLayout.PREFERRED;
double[] rowSize = {p};
double[] columnSize = {p,f};
int[][] rowCount = {{1, 1}};
final JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, 30, LayoutConstants.VGAP_LARGE);
panel.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0));
final JPanel panelWrapper = FRGUIPaneFactory.createBorderLayout_S_Pane();
panelWrapper.add(panel, BorderLayout.NORTH);
UIExpandablePane folderPane = new UIExpandablePane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Advanced"), 280, 20, panelWrapper);
this.add(folderPane, BorderLayout.NORTH);
this.repaint();
}
private void bindListeners2Widgets() {
reInitAllListeners();
AttributeChangeListener changeListener = new AttributeChangeListener() {
@Override
public void attributeChange() {
update();
}
};
this.addAttributeChangeListener(changeListener);
}
/**
* 后台初始化所有事件.
*/
private void reInitAllListeners() {
initListener(this);
}
@Override
public void populate(FormDesigner designer) {
ButtonGroup buttonGroup = (ButtonGroup)xCreator.toData();
this.maxShowRowsSpinner.setValue(buttonGroup.getMaxShowRows());
// 数据 populate 完成后,再设置监听
this.bindListeners2Widgets();
}
@Override
public void update() {
ButtonGroup buttonGroup = (ButtonGroup)xCreator.toData();
buttonGroup.setMaxShowRows((int) maxShowRowsSpinner.getValue());
DesignerContext.getDesignerFrame().getSelectedJTemplate().fireTargetModified(); // 触发设计器保存按钮亮起来
}
}

BIN
designer-form/src/main/resources/com/fr/design/form/images/auto_chart_preview.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

3
designer-realize/src/main/java/com/fr/design/actions/insert/cell/AutoChartCellAction.java

@ -2,6 +2,7 @@ package com.fr.design.actions.insert.cell;
import com.fr.base.BaseUtils; import com.fr.base.BaseUtils;
import com.fr.chart.chartattr.AutoChartCollection; import com.fr.chart.chartattr.AutoChartCollection;
import com.fr.common.annotations.Open;
import com.fr.design.actions.core.WorkBookSupportable; import com.fr.design.actions.core.WorkBookSupportable;
import com.fr.design.i18n.Toolkit; import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.ElementCasePane; import com.fr.design.mainframe.ElementCasePane;
@ -14,6 +15,7 @@ import javax.swing.KeyStroke;
* @version 10.0 * @version 10.0
* Created by Bjorn on 2020-05-28 * Created by Bjorn on 2020-05-28
*/ */
@Open
public class AutoChartCellAction extends AbstractCellAction implements WorkBookSupportable { public class AutoChartCellAction extends AbstractCellAction implements WorkBookSupportable {
public AutoChartCellAction() { public AutoChartCellAction() {
@ -29,7 +31,6 @@ public class AutoChartCellAction extends AbstractCellAction implements WorkBookS
this.setMenuKeySet(INSERT_AUTO_CHART); this.setMenuKeySet(INSERT_AUTO_CHART);
this.setName(getMenuKeySet().getMenuKeySetName() + "..."); this.setName(getMenuKeySet().getMenuKeySetName() + "...");
this.setMnemonic(getMenuKeySet().getMnemonic()); this.setMnemonic(getMenuKeySet().getMnemonic());
//TODO @Bjorn 视觉样式优化icon
this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_insert/auto_chart.png")); this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_insert/auto_chart.png"));
} }

2
designer-realize/src/main/java/com/fr/design/cell/editor/AutoChartCellEditor.java

@ -1,5 +1,6 @@
package com.fr.design.cell.editor; package com.fr.design.cell.editor;
import com.fr.common.annotations.Open;
import com.fr.design.gui.chart.MiddleChartDialog; import com.fr.design.gui.chart.MiddleChartDialog;
import com.fr.design.mainframe.ElementCasePane; import com.fr.design.mainframe.ElementCasePane;
import com.fr.design.module.DesignModuleFactory; import com.fr.design.module.DesignModuleFactory;
@ -12,6 +13,7 @@ import java.awt.Window;
* @version 10.0 * @version 10.0
* Created by Bjorn on 2020-05-28 * Created by Bjorn on 2020-05-28
*/ */
@Open
public class AutoChartCellEditor extends ChartCellEditor { public class AutoChartCellEditor extends ChartCellEditor {
public AutoChartCellEditor(ElementCasePane<? extends TemplateElementCase> ePane) { public AutoChartCellEditor(ElementCasePane<? extends TemplateElementCase> ePane) {

7
designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePane.java

@ -9,7 +9,6 @@ import com.fr.base.Formula;
import com.fr.base.ScreenResolution; import com.fr.base.ScreenResolution;
import com.fr.base.Style; import com.fr.base.Style;
import com.fr.base.vcs.DesignerMode; import com.fr.base.vcs.DesignerMode;
import com.fr.chart.chartattr.AutoChartCollection;
import com.fr.design.DesignState; import com.fr.design.DesignState;
import com.fr.design.DesignerEnvManager; import com.fr.design.DesignerEnvManager;
import com.fr.design.ExtraDesignClassManager; import com.fr.design.ExtraDesignClassManager;
@ -53,8 +52,6 @@ import com.fr.design.cell.bar.DynamicScrollBar;
import com.fr.design.cell.clipboard.CellElementsClip; import com.fr.design.cell.clipboard.CellElementsClip;
import com.fr.design.cell.clipboard.ElementsTransferable; import com.fr.design.cell.clipboard.ElementsTransferable;
import com.fr.design.cell.clipboard.FloatElementsClip; import com.fr.design.cell.clipboard.FloatElementsClip;
import com.fr.design.cell.editor.AutoChartCellEditor;
import com.fr.design.cell.editor.AutoChartFloatEditor;
import com.fr.design.cell.editor.BiasTextPainterCellEditor; import com.fr.design.cell.editor.BiasTextPainterCellEditor;
import com.fr.design.cell.editor.CellEditor; import com.fr.design.cell.editor.CellEditor;
import com.fr.design.cell.editor.ChartCellEditor; import com.fr.design.cell.editor.ChartCellEditor;
@ -402,8 +399,6 @@ public abstract class ElementCasePane<T extends TemplateElementCase> extends Tar
grid.setDefaultFloatEditor(chartClass, new ChartFloatEditor()); grid.setDefaultFloatEditor(chartClass, new ChartFloatEditor());
} }
grid.setDefaultCellEditor(AutoChartCollection.class, new AutoChartCellEditor(this));
grid.setDefaultFloatEditor(AutoChartCollection.class, new AutoChartFloatEditor());
addExtraCellEditor(grid); addExtraCellEditor(grid);
@ -427,7 +422,7 @@ public abstract class ElementCasePane<T extends TemplateElementCase> extends Tar
editor = (CellEditor) c.newInstance(); editor = (CellEditor) c.newInstance();
} catch (NoSuchMethodException e) { } catch (NoSuchMethodException e) {
try { try {
c = clazz.getConstructor(ElementCase.class); c = clazz.getConstructor(ElementCasePane.class);
editor = (CellEditor) c.newInstance(this); editor = (CellEditor) c.newInstance(this);
} catch (Exception e1) { } catch (Exception e1) {
FineLoggerFactory.getLogger().error(e1.getMessage(), e1); FineLoggerFactory.getLogger().error(e1.getMessage(), e1);

7
designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoLogAppender.java

@ -147,8 +147,11 @@ public class ErrorInfoLogAppender extends AppenderSkeleton {
} }
}; };
try { try {
file.readStream(new ByteArrayInputStream(WorkContext.getWorkResource().readFully(StableUtils.pathJoin(ProjectConstants.REPORTLETS_NAME, bookPath)))); //如果bookPath是null,ResourceIOUtils会因为无法读取文件夹的流输出error日志,输出日志会再次走到这里,引起死循环
return file.getTemplateID(); if (StringUtils.isNotBlank(bookPath)) {
file.readStream(new ByteArrayInputStream(WorkContext.getWorkResource().readFully(StableUtils.pathJoin(ProjectConstants.REPORTLETS_NAME, bookPath))));
return file.getTemplateID();
}
} catch (Exception ignore) { } catch (Exception ignore) {
} }

12
designer-realize/src/main/java/com/fr/design/mainframe/form/FormElementCaseDesigner.java

@ -5,7 +5,6 @@ package com.fr.design.mainframe.form;
import com.fr.base.vcs.DesignerMode; 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.actions.AllowAuthorityEditAction; import com.fr.design.actions.AllowAuthorityEditAction;
import com.fr.design.actions.ExitAuthorityEditAction; import com.fr.design.actions.ExitAuthorityEditAction;
import com.fr.design.base.mode.DesignModeContext; import com.fr.design.base.mode.DesignModeContext;
@ -26,7 +25,6 @@ import com.fr.design.menu.NameSeparator;
import com.fr.design.menu.ShortCut; import com.fr.design.menu.ShortCut;
import com.fr.design.menu.ToolBarDef; import com.fr.design.menu.ToolBarDef;
import com.fr.design.present.ConditionAttributesGroupPane; import com.fr.design.present.ConditionAttributesGroupPane;
import com.fr.design.fun.FormAdaptiveConfigUIProcessor;
import com.fr.design.selection.SelectableElement; import com.fr.design.selection.SelectableElement;
import com.fr.design.selection.Selectedable; import com.fr.design.selection.Selectedable;
import com.fr.design.selection.SelectionListener; import com.fr.design.selection.SelectionListener;
@ -65,9 +63,8 @@ public class FormElementCaseDesigner
public FormElementCaseDesigner(T sheet, Form form) { public FormElementCaseDesigner(T sheet, Form form) {
super(sheet); super(sheet);
elementCasePane = initElementCasePane(sheet, form);
this.setLayout(FRGUIPaneFactory.createBorderLayout()); this.setLayout(FRGUIPaneFactory.createBorderLayout());
elementCasePane = new FormElementCasePaneDelegate((FormElementCase) sheet, form);
elementCasePane.setSelection(getDefaultSelectElement()); elementCasePane.setSelection(getDefaultSelectElement());
this.add(elementCasePane, BorderLayout.CENTER); this.add(elementCasePane, BorderLayout.CENTER);
elementCasePane.addTargetModifiedListener(new TargetModifiedListener() { elementCasePane.addTargetModifiedListener(new TargetModifiedListener() {
@ -80,6 +77,9 @@ public class FormElementCaseDesigner
} }
protected FormElementCasePaneDelegate initElementCasePane(T sheet, Form form){
return new FormElementCasePaneDelegate((FormElementCase) sheet, form);
}
@Override @Override
public void setTarget(T t) { public void setTarget(T t) {
@ -126,10 +126,6 @@ public class FormElementCaseDesigner
*/ */
@Override @Override
public BufferedImage getElementCaseImage(Dimension size) { public BufferedImage getElementCaseImage(Dimension size) {
FormAdaptiveConfigUIProcessor adaptiveConfigUI = ExtraDesignClassManager.getInstance().getSingle(FormAdaptiveConfigUIProcessor.MARK_STRING);
if (adaptiveConfigUI != null) {
return adaptiveConfigUI.paintFormElementCaseImage(size, this.elementCasePane);
}
BufferedImage image = null; BufferedImage image = null;
try { try {
image = new java.awt.image.BufferedImage(size.width, size.height, image = new java.awt.image.BufferedImage(size.width, size.height,

54
designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java

@ -2,13 +2,16 @@ package com.fr.design.mainframe.socketio;
import com.fr.config.RemoteConfigEvent; import com.fr.config.RemoteConfigEvent;
import com.fr.decision.webservice.utils.DecisionServiceConstants; import com.fr.decision.webservice.utils.DecisionServiceConstants;
import com.fr.design.DesignerEnvManager;
import com.fr.design.EnvChangeEntrance; import com.fr.design.EnvChangeEntrance;
import com.fr.design.dialog.FineJOptionPane; import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.i18n.Toolkit; import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.loghandler.DesignerLogger; import com.fr.design.mainframe.loghandler.DesignerLogger;
import com.fr.design.ui.util.UIUtil; import com.fr.design.ui.util.UIUtil;
import com.fr.event.Event;
import com.fr.event.EventDispatcher; import com.fr.event.EventDispatcher;
import com.fr.event.Listener;
import com.fr.log.FineLoggerFactory; import com.fr.log.FineLoggerFactory;
import com.fr.report.RemoteDesignConstants; import com.fr.report.RemoteDesignConstants;
import com.fr.serialization.SerializerHelper; import com.fr.serialization.SerializerHelper;
@ -16,6 +19,7 @@ import com.fr.stable.ArrayUtils;
import com.fr.third.apache.log4j.spi.LoggingEvent; import com.fr.third.apache.log4j.spi.LoggingEvent;
import com.fr.workspace.WorkContext; import com.fr.workspace.WorkContext;
import com.fr.workspace.Workspace; import com.fr.workspace.Workspace;
import com.fr.workspace.WorkspaceEvent;
import com.fr.workspace.base.WorkspaceConstants; import com.fr.workspace.base.WorkspaceConstants;
import com.fr.workspace.connect.WorkspaceConnection; import com.fr.workspace.connect.WorkspaceConnection;
import com.fr.workspace.server.socket.SocketInfoOperator; import com.fr.workspace.server.socket.SocketInfoOperator;
@ -30,6 +34,20 @@ import java.net.URL;
public class DesignerSocketIO { public class DesignerSocketIO {
static {
EventDispatcher.listen(WorkspaceEvent.LostConnect, new Listener<Workspace>() {
@Override
public void on(Event event, Workspace param) {
// 远程设计websocket不支持wss 所以断开无法提醒
// 使用远程设计的心跳断开来提醒断开
if (DesignerEnvManager.getEnvManager().isHttps()) {
showConnectionLostDialog();
}
}
});
}
enum Status { enum Status {
Connected, Connected,
Disconnected, Disconnected,
@ -143,27 +161,31 @@ public class DesignerSocketIO {
* socket 只用推日志和通知配置变更 * socket 只用推日志和通知配置变更
*/ */
if (status != Status.Disconnecting) { if (status != Status.Disconnecting) {
try { showConnectionLostDialog();
UIUtil.invokeAndWaitIfNeeded(new Runnable() {
@Override
public void run() {
FineJOptionPane.showMessageDialog(
DesignerContext.getDesignerFrame(),
Toolkit.i18nText("Fine-Design_Basic_Remote_Disconnected"),
UIManager.getString("OptionPane.messageDialogTitle"),
JOptionPane.ERROR_MESSAGE,
UIManager.getIcon("OptionPane.errorIcon"));
EnvChangeEntrance.getInstance().chooseEnv();
}
});
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
} }
status = Status.Disconnected; status = Status.Disconnected;
} }
}; };
private static void showConnectionLostDialog() {
try {
UIUtil.invokeAndWaitIfNeeded(new Runnable() {
@Override
public void run() {
FineJOptionPane.showMessageDialog(
DesignerContext.getDesignerFrame(),
Toolkit.i18nText("Fine-Design_Basic_Remote_Disconnected"),
UIManager.getString("OptionPane.messageDialogTitle"),
JOptionPane.ERROR_MESSAGE,
UIManager.getIcon("OptionPane.errorIcon"));
EnvChangeEntrance.getInstance().chooseEnv();
}
});
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
}
//配置变更监听器 //配置变更监听器
private static final Emitter.Listener modifyConfig = new Emitter.Listener() { private static final Emitter.Listener modifyConfig = new Emitter.Listener() {
@Override @Override

3
designer-realize/src/main/java/com/fr/design/widget/CellWidgetCardPane.java

@ -136,6 +136,9 @@ public class CellWidgetCardPane extends BasicPane {
//todo //todo
} }
}); });
if (rn == null) {
return;
}
DataModify<? extends Widget> definePane = rn.getDefinePane(); DataModify<? extends Widget> definePane = rn.getDefinePane();
attriCardPane.add(definePane.toSwingComponent(), rn.getCardName()); attriCardPane.add(definePane.toSwingComponent(), rn.getCardName());
attriCardLayout.show(attriCardPane, rn.getCardName()); attriCardLayout.show(attriCardPane, rn.getCardName());

3
designer-realize/src/main/java/com/fr/quickeditor/CellQuickEditor.java

@ -187,7 +187,8 @@ public abstract class CellQuickEditor extends QuickEditor<ElementCasePane> {
selectedIndex = comboBox.getSelectedIndex(); selectedIndex = comboBox.getSelectedIndex();
comboBox.setPopupVisible(false); comboBox.setPopupVisible(false);
comboBox.repaint(); comboBox.repaint();
if (selectedIndex < cellInsertActions.length) { // comboBox.getSelectedIndex()可能返回-1
if (selectedIndex != -1 && selectedIndex < cellInsertActions.length) {
cellInsertActions[selectedIndex].actionPerformed(e); cellInsertActions[selectedIndex].actionPerformed(e);
} }
comboBox.setSelectedIndex(currentSelectedIndex); comboBox.setSelectedIndex(currentSelectedIndex);

3
designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java

@ -350,6 +350,9 @@ public class DesignerActivator extends Activator {
Set<ElementUIProvider> providers = ExtraDesignClassManager.getInstance().getArray(ElementUIProvider.MARK_STRING); Set<ElementUIProvider> providers = ExtraDesignClassManager.getInstance().getArray(ElementUIProvider.MARK_STRING);
for (ElementUIProvider provider : providers) { for (ElementUIProvider provider : providers) {
try { try {
if (provider.quickEditor() == null) {
continue;
}
ActionFactory.registerCellEditor(provider.targetObjectClass(), provider.quickEditor().newInstance()); ActionFactory.registerCellEditor(provider.targetObjectClass(), provider.quickEditor().newInstance());
} catch (Exception e) { } catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e); FineLoggerFactory.getLogger().error(e.getMessage(), e);

Loading…
Cancel
Save